// 数字类
/**
 * 正则: 数字
 */
const REGEX_LIB_NUM = '^[0-9]*$'

/**
 * 正则: 正数、负数、或小数
 */
const REGEX_IOF_IGNORE_SYM = '^(\\-|\\+)?\\d+(\\.\\d+)?$'

/**
 * 正则: 非零正整数
 */
const REGEX_NOTZERO_INT_POS = '^\\+?[1-9][0-9]*$'

/**
 * 正则:非零负整数
 */
const REGEX_NOTZERO_INT_NEG = '^-[1-9]\\d*$'

/**
 * 正则:非负整数
 */
const REGEX_NONEGATIVE_INT = '^\\d+$'

/**
 * 正则:非正整数
 */
const REGEX_NOPOSITIVE_INT = '^((-\\d+)|(0+))$'

/**
 * 正则:非负浮点数
 */
const REGEX_NONEGATIVE_FLOAT = '^\\d+(\\.\\d+)?$'

/**
 * 正则:非正浮点数
 */
const REGEX_NOPOSITIVE_FLOAT = '^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$'

/**
 * 正则:负浮点数
 */
const REGEX_NEGATIVE_FLOAT = '^-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*)$'

/**
 * 正则:正浮点数
 */
const REGEX_POSITIVE_FLOAT = '^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$'

/**
 * 正则:浮点数
 */
const REGEX_FLOAT = '^(-?\\d+)(\\.\\d+)?$'

// 字符类
/**
 * 正则: 汉字
 */
const REGEX_CHINESE_CHARACTERS = '^[\\u4e00-\\u9fa5]{0,}$'

/**
 * 正则 :英文字母和数字
 */
const REGEX_LETTERS_AND_NUMBERS = '^[A-Za-z0-9]+$'

/**
 * 正则: 英文字母
 */
const REGEX_LETTERS = '^[A-Za-z]+$'

/**
 * 正则: 大写字母
 */
const REGEX_LETTERS_CAPITAL = '^[A-Z]+$'

/**
 * 正则: 小写字母
 */
const REGEX_LETTERS_SMALL = '^[a-z]+$'

/**
 * 正则 :英文字母、数字、下划线
 */
const REGEX_LETTERS_NUMBERS_UNDERLINE = '^\\w+$'

/**
 * 中文、英文、数字包括下划线
 */
const REGEX_CHN_ENG_NUM_AND_UNDERLINE = '^[\\u4E00-\\u9FA5A-Za-z0-9_]+$'

/**
 * 正则: 中文、英文、数字但不包括下划线等符号
 */
const REGEX_CHN_ENG_NUM_NO_UNDERLINE = '^[\\u4E00-\\u9FA5A-Za-z0-9]'

/**
 * 正则: Email电子邮箱
 */
const REGEX_EMAIL = '^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$'

/**
 * 正则: 手机号码
 */
const REGEX_MOBILE_PHONE = '^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$'

/**
 * 正则: 座机电话号码
 */
const REGEX_TEL = '^(\\d{3,4}-)?\\d{7,8}$'

/*
 * 正则: 邮政编码
 */
const REGEX_POST_CODE = '[1-9]\\d{5}(?!\\d)'

// 正则表达式获取: 数字
const _getNum = (o) => {
  return o ? REGEX_LIB_NUM : '请输入数字'
}

// 正则表达式获取: 正数、负数、或小数
const _getIOFIgnoreSym = (o) => {
  return o ? REGEX_IOF_IGNORE_SYM : '请输入正数、负数、或小数'
}

// 正则表达式获取: 非零正整数
const _getNotZeroIntPos = (o) => {
  return o ? REGEX_NOTZERO_INT_POS : '请输入非零正整数'
}
// 正则表达式获取: 非零负整数
const _getNotZeroIntNeg = (o) => {
  return o ? REGEX_NOTZERO_INT_NEG : '请输入非零负整数'
}

// 正则表达式获取: 非负整数
const _getNoNegativeInt = (o) => {
  return o ? REGEX_NONEGATIVE_INT : '请输入非负整数'
}

// 正则表达式获取: 非正整数
const _getNoPositiveInt = (o) => {
  return o ? REGEX_NOPOSITIVE_INT : '请输入非正整数'
}

// 正则表达式获取: 非负浮点数
const _getNoNegativeFloat = (o) => {
  return o ? REGEX_NONEGATIVE_FLOAT : '请输入数字'
}
// 正则表达式获取: 非正浮点数
const _getNoPositiveFloat = (o) => {
  return o ? REGEX_NOPOSITIVE_FLOAT : '请输入非正浮点数'
}

// 正则表达式获取: 负浮点数
const _getNegativeFloat = (o) => {
  return o ? REGEX_NEGATIVE_FLOAT : '请输入负浮点数'
}

// 正则表达式获取: 正浮点数
const _getPositiveFloat = (o) => {
  return o ? REGEX_POSITIVE_FLOAT : '请输入正浮点数'
}

// 正则表达式获取: 浮点数
const _getFloat = (o) => {
  return o ? REGEX_FLOAT : '请输入浮点数'
}

// 正则表达式获取: 汉字
const _getChineseCharacters = (o) => {
  return o ? REGEX_CHINESE_CHARACTERS : '请输入汉字'
}

// 正则表达式获取: 英文字母和数字
const _getLettersAndNumbers = (o) => {
  return o ? REGEX_LETTERS_AND_NUMBERS : '请输入英文字母和数字'
}

// 正则表达式获取: 英文字母
const _getLetters = (o) => {
  return o ? REGEX_LETTERS : '请输入英文字母'
}

// 正则表达式获取: 大写字母
const _getLettersCapital = (o) => {
  return o ? REGEX_LETTERS_CAPITAL : '请输入字母'
}

// 正则表达式获取: 小写字母
const _getLettersSmall = (o) => {
  return o ? REGEX_LETTERS_SMALL : '请输入小写字母'
}

// 正则表达式获取: 英文字母、数字、下划线
const _getLettersNumbersUnderline = (o) => {
  return o ? REGEX_LETTERS_NUMBERS_UNDERLINE : '请输入英文字母、数字、下划线'
}

// 正则表达式获取: 中文、英文、数字包括下划线
const _getChnEngNumAndUnderline = (o) => {
  return o ? REGEX_CHN_ENG_NUM_AND_UNDERLINE : '请输入中文、英文、数字包括下划线'
}

// 正则表达式获取: 中文、英文、数字但不包括下划线等符号
const _getChnEngNumNoUnderline = (o) => {
  return o ? REGEX_CHN_ENG_NUM_NO_UNDERLINE : '请输入中文、英文、数字但不包括下划线等符号'
}

// 正则表达式获取: Email电子邮箱
const _getEmail = (o) => {
  return o ? REGEX_EMAIL : '请输入正确的Email电子邮箱'
}

// 正则表达式获取: 手机号码
const _getMobilePhone = (o) => {
  return o ? REGEX_MOBILE_PHONE : '请输入正确的手机号码'
}

// 正则表达式获取: 座机电话号码
const _getTel = (o) => {
  return o ? REGEX_TEL : '请输入正确的座机电话号码'
}

// 正则表达式获取: 邮政编码
const _getPostCode = (o) => {
  return o ? REGEX_POST_CODE : '请输入正确的邮政编码'
}

// 获取n位数的正则表达式
const _getNBitNum = (o, n) => {
  return o ? '^\\d{' + n + '}$' : '请输入' + n + '位数字'
}

// 获取至少n位数的正则表达式
const _getLeastNBitNum = (o, n) => {
  return o ? '^\\d{' + n + ',}$' : '请输入至少' + n + '位数字'
}

// 获取m-n位数的正则表达式
const _getRangeBitNum = (o, m, n) => {
  return o ? '^\\d{' + m + ',' + n + '}$' : '请输入' + m + '-' + n + '位数字'
}
const _length = (o, l) => {
  return o ? '^([\\s\\S*]){1,' + l + '}$' : '最大长度为' + l
}
const _returnStr = (val) => {
  if (val === undefined || val === null) {
    return ''
  } else {
    return val + ''
  }
}
export default {
  returnStr (val) {
    return _returnStr(val)
  },
  length (o, l) {
    return _length(o, l)
  },
  num (o) {
    return _getNum(o)
  },
  iofIgnoreSym (o) {
    return _getIOFIgnoreSym(o)
  },
  notZeroIntPos (o) {
    return _getNotZeroIntPos(o)
  },
  notZeroIntNeg (o) {
    return _getNotZeroIntNeg(o)
  },
  noNegativeInt (o) {
    return _getNoNegativeInt(o)
  },
  noPositiveInt (o) {
    return _getNoPositiveInt(o)
  },
  noNegativeFloat (o) {
    return _getNoNegativeFloat(o)
  },
  NoPositiveFloat (o) {
    return _getNoPositiveFloat(o)
  },
  negativeFloat (o) {
    return _getNegativeFloat(o)
  },
  positiveFloat (o) {
    return _getPositiveFloat(o)
  },
  float (o) {
    return _getFloat(o)
  },
  chineseCharacters (o) {
    return _getChineseCharacters(o)
  },
  lettersAndNumbers (o) {
    return _getLettersAndNumbers(o)
  },
  letters (o) {
    return _getLetters(o)
  },
  lettersCapital (o) {
    return _getLettersCapital(o)
  },
  lettersSmall (o) {
    return _getLettersSmall(o)
  },
  lettersNumbersUnderline (o) {
    return _getLettersNumbersUnderline(o)
  },
  chnEngNumAndUnderline (o) {
    return _getChnEngNumAndUnderline(o)
  },
  chnEngNumNoUnderline (o) {
    return _getChnEngNumNoUnderline(o)
  },
  email (o) {
    return _getEmail(o)
  },
  tel (o) {
    return _getTel(o)
  },
  postCode (o) {
    return _getPostCode(o)
  },
  mobilePhone (o) {
    return _getMobilePhone(o)
  },
  nBitNum (o, n) {
    return _getNBitNum(o, n)
  },
  leastNBitNum (o, n) {
    return _getLeastNBitNum(o, n)
  },
  rangeBitNum (o, m, n) {
    return _getRangeBitNum(o, m, n)
  },
  // 客户管理模块
  // 容量类型正则
  getCapacity (o) {
    return _getNoNegativeFloat(o)
  }
  // getRegisterCode (o, l) {
  //   console.log('_getLettersAndNumbers' + _getLettersAndNumbers(o) + ',' + 'length:' + _length(o, l))
  //   return _getLettersAndNumbers(o, l) && _length(o, l)
  // }
}
